package com.ev.apis.controller.hr;

import javax.validation.Valid;
import java.io.IOException;
import java.text.ParseException;
import java.util.List;

import com.ev.framework.annotation.EvApiByToken;
import com.ev.hr.vo.AdvertiseApproveParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import com.ev.hr.domain.AdvertiseInfoDO;
import com.ev.hr.vo.AdvertiseInfoPageParam;
import com.ev.hr.service.AdvertiseInfoService;
import com.ev.framework.utils.R;

/**
 * 文件名称： com.ev.hr.AdvertiseInfoApiController.java</br>
 * 初始作者： ev-monitor</br>
 * 创建日期： 2020-05-11 13:00:22</br>
 * 功能说明： 招聘需求表 <br/>
 * =================================================<br/>
 * 修改记录：<br/>
 * 修改作者        日期       修改内容<br/>
 * ================================================<br/>
 * Copyright (c) 2020-2021 .All rights reserved.<br/>
 */

@Api(value = "/",tags = "招聘需求表API")
@RestController
public class AdvertiseInfoApiController {

	/**
	 * 招聘需求表 服务类
	 */
	@Autowired
	private AdvertiseInfoService advertiseInfoService;

	/**
	 * 方法描述: [根据条件分页查询招聘需求表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-11 13:00:22<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param pageParam 分页参数
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/advertiseInfo/pageList", method = RequestMethod.POST, apiTitle = "根据条件分页查询招聘需求表")
	@ApiOperation(value = "根据条件分页查询招聘需求表", produces = MediaType.APPLICATION_JSON_VALUE)
	public R pageList(@Valid @RequestBody @ApiParam("招聘需求表分页列表参数对象") AdvertiseInfoPageParam pageParam) {
		return R.ok(this.advertiseInfoService.pageList(pageParam));
	}

	/**
	 * 方法描述: [根据id获取招聘需求表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-11 13:00:22<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param id 主键
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/advertiseInfo/detail/{id}", method = RequestMethod.GET, apiTitle = "根据id获取招聘需求表")
	@ApiOperation("根据id获取招聘需求表")
	public R detail(@PathVariable("id") @ApiParam("id") Long id) {
		return R.ok(this.advertiseInfoService.getById(id));
	}
	/**
	 * 方法描述: [根据id获取岗位描述.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-11 13:00:22<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param id 主键
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/advertiseInfo/jobDescription/{id}", method = RequestMethod.GET, apiTitle = "根据id获取岗位描述")
	@ApiOperation("根据id获取岗位描述")
	public R jobDescription(@PathVariable("id") @ApiParam("id") Long id) {
		return R.ok(this.advertiseInfoService.getJobDescription(id));
	}

	/**
	 * 方法描述: [批量删除]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-11 13:00:22<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param ids ID组
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/advertiseInfo/batchRemove", method = RequestMethod.POST, apiTitle = "批量删除")
	@ApiOperation(value = "批量删除", notes = "批量删除", produces = MediaType.APPLICATION_JSON_VALUE)
	@Transactional(rollbackFor = Exception.class)
	public R batchRemove(@RequestBody @ApiParam("批量删除") List<Long> ids){
		return this.advertiseInfoService.batchDelete(ids);
	}

	/**
	 * 方法描述: [批量关闭（只能关闭已结束的）]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-11 13:00:22<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param ids ID组
	 * @return R 响应对象
	 */
	@EvApiByToken(value = "/apis/advertiseInfo/batchClose", method = RequestMethod.POST, apiTitle = "[批量关闭（只能关闭已结束的）]")
	@ApiOperation(value = "[批量关闭（只能关闭已结束的）]", notes = "[批量关闭（只能关闭已结束的）]", produces = MediaType.APPLICATION_JSON_VALUE)
	@Transactional(rollbackFor = Exception.class)
	public R batchClose(@RequestBody @ApiParam("[批量关闭（只能关闭已结束的）]") List<Long> ids){
		return this.advertiseInfoService.batchClose(ids);
	}

	/**
	 * 方法描述: [暂存/修改招聘需求表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-11 13:00:22<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param saveParam 招聘需求表参数
	 * @return R 响应对象
	 */
	@Transactional(rollbackFor = Exception.class)
	@EvApiByToken(value = "/apis/advertiseInfo/save", method = RequestMethod.POST, apiTitle = "暂存/修改招聘需求表")
	@ApiOperation("暂存/修改招聘需求表")
	public R save(@Valid @RequestBody @ApiParam("暂存/修改招聘需求表对象") AdvertiseInfoDO saveParam){
		return this.advertiseInfoService.saveAndVerify(saveParam,false);
	}

	/**
	 * 方法描述: [提交招聘需求表.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-11 13:00:22<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param saveParam 招聘需求表参数
	 * @return R 响应对象
	 */
	@Transactional(rollbackFor = Exception.class)
	@EvApiByToken(value = "/apis/advertiseInfo/submit", method = RequestMethod.POST, apiTitle = "提交招聘需求表")
	@ApiOperation("提交招聘需求表")
	public R submit(@Valid @RequestBody @ApiParam("提交招聘需求表") AdvertiseInfoDO saveParam){
		return this.advertiseInfoService.saveAndVerify(saveParam,true);
	}

	/**
	 * 方法描述: [提交招聘需求审批消息.]</br>
	 * 初始作者: ev-monitor<br/>
	 * 创建日期: 2020-05-11 13:00:22<br/>
	 * 开始版本: 1.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 *
	 * @param saveParam 招聘需求表参数
	 * @return R 响应对象
	 */
	@Transactional(rollbackFor = Exception.class)
	@EvApiByToken(value = "/apis/advertiseInfo/approve", method = RequestMethod.POST, apiTitle = "提交招聘需求审批消息")
	@ApiOperation("提交招聘需求审批消息")
	public R approve(@Valid @RequestBody @ApiParam("提交招聘需求审批消息") AdvertiseApproveParam saveParam) throws IOException, ParseException {
		return this.advertiseInfoService.approve(saveParam);
	}
	
}
